package com.zhiche.lisa.lspm.dao.mapper.trailer;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.zhiche.lisa.lspm.dao.model.carrier.bo.CarrierTrailerBO;
import com.zhiche.lisa.lspm.dao.model.driver.Driver;
import com.zhiche.lisa.lspm.dao.model.trailer.TrailerInfo;
import com.zhiche.lisa.lspm.dao.model.trailer.bo.TrailerCarrierBO;
import com.zhiche.lisa.lspm.dao.model.trailer.bo.TrailerInfoBO;
import com.zhiche.lisa.lspm.dao.model.trailer.bo.TrailerInfoLineBO;
import com.zhiche.lisa.lspm.vo.vehicle.TrailerInfoLineVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 挂车 Mapper 接口
 * </p>
 *
 * @author qichao
 * @since 2018-05-23
 */
public interface TrailerInfoMapper extends BaseMapper<TrailerInfo> {

    /**
     *根据匹配条件查询全库的挂车信息
     */
     List<TrailerInfo> selectTrailerNoTenant(@Param("ew") Wrapper<TrailerInfo> ew );


    /**
     * 根据
     */
    TrailerInfoBO selectByCarrierInfoId(@Param("carrierInfoId") Long carrierInfoId);
    /**
     * 挂车列表
     */
    List<TrailerInfoLineVO> trailerInfoLine(Page<TrailerInfoLineBO> page,
                                            @Param("ew") Wrapper<TrailerInfoLineBO> ew);

    /**
     * 认证的挂车列表
     */
    List<TrailerInfoLineVO> authedTrailerInfoLine(Page<TrailerInfoLineBO> page,
                                            @Param("ew") Wrapper<TrailerInfoLineBO> ew);

    /**
     * 批量更新状态
     */
    void batchUpdateStatus(@Param("status") Integer status, @Param("idList") List<Long> idList);

    /**
     * 根据ID更新车辆状态
     */
    Integer updateStatus(@Param("status") Integer status, @Param("id") Long id);
    /**
     * 根据承运商 id 批量更新状态
     */
    void batchUpdateStatusByLspId(@Param("authStatus") Integer authStatus, @Param("status") Integer status, @Param("lspIdList") List<Long> lspIdList);


    /**
     * 根据ID批量更新状态
     */
    void batchUpdateAuthStatusByIds(@Param("authStatus") Integer authStatus, @Param("status") Integer status, @Param("IdList") List<Long> trailerIds);

    /**
     * 根据承运商 id 数组获取底下的所有挂车 id
     */
    List<Long> selectIdByLspIds(@Param("lspIdList") List<Long> lspIdList);

    /**
     * 修改挂车所属牵引车
     * @param id 挂车ID
     * @param carrierId 牵引车ID
     */
    Integer updateCarrier(@Param("id") Long id,@Param("carrierId") Long carrierId);

    /**
     * 将挂车的牵引车批量置空
     * @param ids 挂车ID
     */
    Integer batchCarrierNull(@Param("ids") List<Long> ids);

    List<TrailerCarrierBO> listUsableTrailer(@Param("ew") Wrapper<TrailerCarrierBO> ew);

    List<TrailerCarrierBO> TrailerCarrierList(Page<TrailerCarrierBO> page,
                                                    @Param("ew") Wrapper<TrailerCarrierBO> ew);

    /**
     * 更新挂车里的关联的承运商关系
     */
    void updateLspInfo(TrailerInfo trailerInfo);

    /**
     * 恢复删除状态
     */
    void updateDeleteStatus(@Param("ew") Wrapper<TrailerInfo> ew);

    List<TrailerInfo> selectListNoTenant(@Param("ew") EntityWrapper<TrailerInfo> tlEW);

    TrailerInfo selectByIdNoTenant(@Param("id") Long trailerId);
}
